From: Florian Müllner Date: Wed, 9 Jun 2021 14:42:52 +0000 (+0200) Subject: dbusServices/screencast: Handle pipeline failures gracefully X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~574^2^2~264 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=dc0491ade86a63e598da5fd0319f89c7c53b4e18;p=gnome-shell.git dbusServices/screencast: Handle pipeline failures gracefully If parsing the pipeline fails for some reason, we currently end up with a zombie session that leads to a stuck recording indicator in gnome-shell. Instead, properly tear down the session to allow mutter and gnome-shell to correctly update their state. Part-of: --- diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js index fb56fdb3a..708a15c84 100644 --- a/js/dbusServices/screencast/screencastService.js +++ b/js/dbusServices/screencast/screencastService.js @@ -136,7 +136,8 @@ var Recorder = class { } _startPipeline(nodeId) { - this._ensurePipeline(nodeId); + if (!this._ensurePipeline(nodeId)) + return; const bus = this._pipeline.get_bus(); bus.add_watch(bus, this._onBusMessage.bind(this)); @@ -234,9 +235,15 @@ var Recorder = class { filesink location="${this._filePath}"`; fullPipeline = this._substituteThreadCount(fullPipeline); - this._pipeline = Gst.parse_launch_full(fullPipeline, - null, - Gst.ParseFlags.FATAL_ERRORS); + try { + this._pipeline = Gst.parse_launch_full(fullPipeline, + null, + Gst.ParseFlags.FATAL_ERRORS); + } catch (e) { + log(`Failed to create pipeline: ${e}`); + this._notifyStopped(); + } + return !!this._pipeline; } };